import java.util.Map;

public interface StateWithHeuristic extends StateWithCost {
	/**
	 * Returns a collection of all <code>StateWithHeuristic</code>s adjacent to
	 * this <code>StateWithHeuristic</code>.  Each adjacent <code>StateWithHeuristic</code>
	 * is associated with the step-cost from this <code>StateWithHeuristic</code>
	 * to the adjacent <code>StateWithHeuristic</code>. 
	 * 
	 * @return a collection of all <code>StateWithHeuristic</code>s adjacent to this
	 * <code>StateWithHeuristic</code> and their associated step-costs.
	 */
	Map<StateWithHeuristic,Double> getNeighborsWithCost();

	/**
	 * Returns the estimated cost of the optimal path between this
	 * <code>StateWithHeuristic</code> and a specified goal
	 * <code>StateWithHeuristic</code>. 
	 * 
	 * @return the estimated cost of the optimal path between this
	 * <code>StateWithHeuristic</code> and a specified goal
	 * <code>StateWithHeuristic</code>.
	 */
	double getEstimatedCostToGoal(StateWithHeuristic goal);
}